MVVM প্যাটার্নে Navigation এবং Routing গুরুত্বপূর্ণ ভূমিকা পালন করে, বিশেষ করে যখন অ্যাপ্লিকেশনটি অনেক স্ক্রীন বা পেজ নিয়ে গঠিত। এই প্রক্রিয়া দুটি View এর মধ্যে ব্যবহারকারীকে নেভিগেট করার জন্য এবং বিভিন্ন URL রুটিং পরিচালনা করতে ব্যবহৃত হয়।
নেভিগেশন এবং রাউটিং ব্যবহারের মাধ্যমে অ্যাপ্লিকেশনের বিভিন্ন অংশে দ্রুত এবং কার্যকরীভাবে স্থানান্তর সম্ভব হয়। নিচে এই দুটি ধারণার বিস্তারিত ব্যাখ্যা দেয়া হল।
Navigation হল এমন একটি প্রক্রিয়া, যার মাধ্যমে এক স্ক্রীন বা পেজ থেকে অন্য স্ক্রীনে স্থানান্তর করা হয়। MVVM প্যাটার্নে, ViewModel সাধারণত View-এর সাথে যোগাযোগ করার জন্য নেভিগেশন পরিচালনা করে না, তবে ViewModel ইউজারের অ্যাকশন অনুযায়ী নেভিগেশন কমান্ড পাঠায়, যা View এক্সিকিউট করে।
Command-Based Navigation:
উদাহরণস্বরূপ, যদি আপনি একটি "Next" বাটন ক্লিক করতে চান যা পরবর্তী স্ক্রীনে নিয়ে যাবে, তাহলে আপনি নিম্নলিখিত কমান্ড তৈরি করতে পারেন:
public class NavigateCommand : ICommand
{
private readonly INavigationService _navigationService;
public NavigateCommand(INavigationService navigationService)
{
_navigationService = navigationService;
}
public bool CanExecute(object parameter) => true;
public void Execute(object parameter)
{
_navigationService.NavigateTo("NextPage");
}
public event EventHandler CanExecuteChanged;
}
Navigation Service:
উদাহরণস্বরূপ, WPF বা Xamarin অ্যাপ্লিকেশনে, INavigationService এর মাধ্যমে স্ক্রীন/পেজে পরিবর্তন করা হয়।
public interface INavigationService
{
void NavigateTo(string pageKey);
void GoBack();
}
Routing হল এমন একটি প্রক্রিয়া, যার মাধ্যমে অ্যাপ্লিকেশন URL বা রাউটের মাধ্যমে বিভিন্ন পেজ বা স্ক্রীনে নেভিগেশন পরিচালিত হয়। Routing সাধারণত ওয়েব অ্যাপ্লিকেশন বা Single Page Application (SPA) এর জন্য ব্যবহৃত হয়। এটি URL মেপিং করে ViewModel-এর মধ্যে ডেটা পাস করতে ব্যবহৃত হয়।
URL Routing:
উদাহরণস্বরূপ, ASP.NET Core-এ URL রাউটিং নিচের মতো হতে পারে:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
এখানে {controller=Home}/{action=Index}/{id?}
URL এর অংশ হিসেবে কাজ করে, যা View রেন্ডার করার জন্য Controller এবং Action নির্ধারণ করে।
Dynamic Routing:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "userProfile",
pattern: "profile/{username}",
defaults: new { controller = "User", action = "Profile" });
});
}
এখানে username পরিবর্তিত হলে URL রাউটিং তার উপর ভিত্তি করে সঠিক Controller এবং Action নির্দেশ করবে।
Parameter-based Routing:
উদাহরণস্বরূপ, যদি আপনি একটি প্রোডাক্ট পেজে নেভিগেট করতে চান, তবে URL এর মাধ্যমে প্রোডাক্ট আইডি পাঠানো হবে:
public IActionResult ProductDetails(int id)
{
var product = _productRepository.GetProductById(id);
return View(product);
}
Stateful Routing:
public void Configure(IApplicationBuilder app)
{
app.UseSession();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "product",
pattern: "product/{id}/{category}",
defaults: new { controller = "Product", action = "Details" });
});
}
Navigation এবং Routing হল অ্যাপ্লিকেশন তৈরি ও পরিচালনার জন্য গুরুত্বপূর্ণ প্রযুক্তি যা ইউজারের অ্যাকশন অনুযায়ী ভিউ পরিবর্তন করতে সাহায্য করে। Navigation মূলত অ্যাপ্লিকেশনের এক স্ক্রীন থেকে আরেক স্ক্রীনে স্থানান্তরের প্রক্রিয়া, আর Routing URL এবং প্যারামিটার অনুযায়ী স্ক্রীনে নেভিগেট করার একটি কৌশল। MVVM প্যাটার্নে Command এবং NavigationService এর মাধ্যমে এই দুটি প্রক্রিয়া পরিচালিত হতে পারে। Routing এর মাধ্যমে অ্যাপ্লিকেশনটি ব্যবহারকারীর চাহিদা অনুযায়ী উপযুক্ত পেজে নেভিগেট করে।
MVVM (Model-View-ViewModel) প্যাটার্নে Navigation এবং Routing এর ধারণা ব্যবহারকারীর ইন্টারঅ্যাকশন এবং অ্যাপ্লিকেশনের ভিউগুলোর মধ্যে সঠিকভাবে চলাচল বা স্থানান্তর পরিচালনা করতে সাহায্য করে। এই কনসেপ্ট দুটি গুরুত্বপূর্ণ, বিশেষ করে যখন আপনি একটি মাল্টি-পেজ বা মাল্টি-ভিউ অ্যাপ্লিকেশন তৈরি করেন, যেমন WPF (Windows Presentation Foundation), Xamarin, অথবা অন্যান্য ডেস্কটপ এবং মোবাইল অ্যাপ্লিকেশনে।
Navigation হল একটি অ্যাপ্লিকেশনের এক ভিউ থেকে অন্য ভিউতে যাওয়ার প্রক্রিয়া। MVVM প্যাটার্নে, ViewModel এর মাধ্যমে ভিউগুলির মধ্যে নেভিগেশন পরিচালিত হয়, যেখানে ViewModel টার্গেট ভিউ বা পেজের জন্য প্রয়োজনীয় ডেটা প্রস্তুত করে এবং View (UI) সেই ডেটা প্রদর্শন করে।
public class MainViewModel
{
public ICommand NavigateCommand { get; }
public MainViewModel()
{
NavigateCommand = new RelayCommand(NavigateToDetailsPage);
}
private void NavigateToDetailsPage()
{
// NavigationService কে কল করে DetailsPage-এ নেভিগেট করা
NavigationService.Navigate(new DetailsPage());
}
}
এখানে NavigateCommand কমান্ড ব্যবহারকারীকে DetailsPage-এ নিয়ে যাবে। NavigationService.Navigate()
একটি পদ্ধতি যা নতুন পেজ লোড করে।
Routing হল একটি প্রক্রিয়া যেখানে URL বা কোন বিশেষ পাথ বা রুটের মাধ্যমে অ্যাপ্লিকেশনের বিভিন্ন ভিউ বা পেজে পৌঁছানো হয়। সাধারণত ওয়েব অ্যাপ্লিকেশন বা SPA (Single Page Application) তে Routing ব্যবহৃত হয়, যেখানে একটি নির্দিষ্ট URL বা রাউট পাথ অনুযায়ী ভিউ বা পেজ সিলেক্ট করা হয়।
MVVM প্যাটার্নে Routing সাধারণত ViewModel এবং View এর মধ্যে সঠিক ডেটা প্রবাহ এবং নেভিগেশন নিশ্চিত করতে ব্যবহৃত হয়। ওয়েব অ্যাপ্লিকেশন বা মোবাইল অ্যাপ্লিকেশনে রাউটিং পরিচালনার জন্য, Routing টেবিল বা Route কনফিগারেশন ব্যবহৃত হতে পারে।
WPF অ্যাপ্লিকেশনে, নেভিগেশন সাধারণত Frame এবং Page কন্ট্রোলের মাধ্যমে পরিচালিত হয়। NavigationService ব্যবহার করে ভিউ পরিবর্তন করা হয়।
public class MainViewModel
{
public ICommand NavigateToDetailsCommand { get; }
public MainViewModel()
{
NavigateToDetailsCommand = new RelayCommand(NavigateToDetails);
}
private void NavigateToDetails()
{
// NavigationService ব্যবহার করে DetailsPage এ নেভিগেট করা
NavigationService.Navigate(new DetailsPage());
}
}
এই উদাহরণে, NavigateToDetailsCommand কমান্ডটি DetailsPage-এ নেভিগেট করবে।
Xamarin অ্যাপ্লিকেশনে, INavigation ইন্টারফেস ব্যবহার করে নেভিগেশন করা হয়।
public class MainViewModel
{
public ICommand NavigateToDetailsCommand { get; }
public MainViewModel()
{
NavigateToDetailsCommand = new RelayCommand(NavigateToDetails);
}
private async void NavigateToDetails()
{
// Xamarin নেভিগেশন
await Application.Current.MainPage.Navigation.PushAsync(new DetailsPage());
}
}
এখানে PushAsync() পদ্ধতি ব্যবহার করে অ্যাপ্লিকেশনটি নতুন পেজে চলে যায়।
ASP.NET Core MVC অ্যাপ্লিকেশনে, রাউটিং URL পাথের মাধ্যমে পরিচালিত হয়। Startup.cs ফাইলে রাউট কনফিগারেশন করা হয়।
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
এখানে, controller এবং action এর মাধ্যমে URL রাউটিং কনফিগার করা হয়েছে।
MVVM প্যাটার্নে Navigation এবং Routing দুটি গুরুত্বপূর্ণ কনসেপ্ট যা অ্যাপ্লিকেশনটির ভিউগুলোর মধ্যে সঠিকভাবে চলাচল এবং ডেটার সঠিক প্রবাহ নিশ্চিত করে। Navigation ব্যবহৃত হয় ভিউগুলির মধ্যে স্থানান্তর করতে, এবং Routing ব্যবহৃত হয় একটি নির্দিষ্ট URL বা পাথের মাধ্যমে ভিউ বা পেজ সিলেক্ট করতে। MVVM প্যাটার্নে এই দুটি কনসেপ্ট ইন্টারঅ্যাক্টিভ এবং ইউজার-ফ্রেন্ডলি অ্যাপ্লিকেশন ডিজাইন করতে সাহায্য করে।
MVVM (Model-View-ViewModel) প্যাটার্নে View Switching এবং Navigation Service ব্যবহৃত হয় যখন অ্যাপ্লিকেশনে একাধিক ভিউ বা পৃষ্ঠা (Page/View) থাকে এবং ব্যবহারকারী তাদের মধ্যে নেভিগেট করতে সক্ষম হয়। এর মাধ্যমে অ্যাপ্লিকেশনটির ভিউ এবং নেভিগেশনকে ম্যানেজ করা হয়, তবে এই প্রক্রিয়াটি ViewModel থেকে View কে সরাসরি প্রভাবিত না করে।
View Switching এর মাধ্যমে একটি ভিউ থেকে অন্য ভিউতে দ্রুত পরিবর্তন করা হয়। MVVM প্যাটার্নে এটি ViewModel-এর নির্দেশে পরিচালিত হয়, যা View এবং Navigation Service এর মাধ্যমে ঘটানো হয়।
ধরা যাক, আমাদের একটি অ্যাপ্লিকেশন যেখানে দুটি ভিউ রয়েছে—HomePage এবং DetailsPage। আমরা চাই যে, একটি বাটন ক্লিক করলে HomePage থেকে DetailsPage-এ চলে যাবে। এখানে ViewModel থেকে ভিউ পরিবর্তন করা হবে।
public interface INavigationService
{
void NavigateTo(string pageKey);
}
public class NavigationService : INavigationService
{
private readonly IDictionary<string, Type> _pageMappings;
public NavigationService()
{
_pageMappings = new Dictionary<string, Type>();
}
public void RegisterPage(string key, Type pageType)
{
if (!_pageMappings.ContainsKey(key))
{
_pageMappings.Add(key, pageType);
}
}
public void NavigateTo(string pageKey)
{
Type pageType;
if (_pageMappings.TryGetValue(pageKey, out pageType))
{
var page = (Page)Activator.CreateInstance(pageType);
Application.Current.MainPage.Navigation.PushAsync(page);
}
}
}
public class HomePageViewModel
{
private readonly INavigationService _navigationService;
public HomePageViewModel(INavigationService navigationService)
{
_navigationService = navigationService;
}
public ICommand NavigateToDetailsCommand => new Command(() =>
{
_navigationService.NavigateTo("DetailsPage");
});
}
<!-- HomePage.xaml -->
<Button Text="Go to Details" Command="{Binding NavigateToDetailsCommand}" />
public class App : Application
{
public App()
{
var navigationService = new NavigationService();
navigationService.RegisterPage("HomePage", typeof(HomePage));
navigationService.RegisterPage("DetailsPage", typeof(DetailsPage));
MainPage = new NavigationPage(new HomePage
{
BindingContext = new HomePageViewModel(navigationService)
});
}
}
Navigation Service ব্যবহার করার অনেক সুবিধা রয়েছে, যেমন:
এমন কিছু চ্যালেঞ্জও থাকতে পারে, যেমন:
View Switching এবং Navigation Service MVVM প্যাটার্নে ViewModel এবং View এর মধ্যে ম্যানেজড এবং স্কেলেবল নেভিগেশন প্রদান করে। NavigationService ক্লাসের মাধ্যমে বিভিন্ন ভিউ এর মধ্যে নেভিগেট করা সহজ হয় এবং অ্যাপ্লিকেশনের লজিক এবং UI কে পৃথক রাখার মাধ্যমে কোডের পুনঃব্যবহারযোগ্যতা বৃদ্ধি পায়। তবে, যথাযথ স্টেট ম্যানেজমেন্ট এবং পারফরম্যান্সের বিষয়ে সতর্ক থাকা প্রয়োজন, বিশেষত যখন অ্যাপ্লিকেশনে অনেক ভিউ এবং পৃষ্ঠা ব্যবহৃত হয়।
Master-Detail View এবং User Control হল দুটি গুরুত্বপূর্ণ ধারণা যা MVVM প্যাটার্নে View এর কাঠামো এবং পুনঃব্যবহারযোগ্যতার উন্নতি ঘটাতে ব্যবহৃত হয়। Master-Detail View অ্যাপ্লিকেশনগুলিতে ডেটা প্রদর্শন এবং User Control ইউজার ইন্টারফেস (UI) উপাদানগুলির পুনঃব্যবহারযোগ্য কম্পোনেন্ট তৈরির জন্য ব্যবহৃত হয়।
এখানে Master-Detail View এবং User Control ব্যবহারের বিস্তারিত আলোচনা করা হয়েছে।
Master-Detail View একটি সাধারণ UI প্যাটার্ন যা বড় ডেটা সেট বা তালিকা প্রদর্শনের জন্য ব্যবহৃত হয়। এটি একটি Master প্যানেল এবং একটি Detail প্যানেল নিয়ে গঠিত থাকে। Master প্যানেল একটি তালিকা বা ডেটার সারাংশ দেখায়, এবং Detail প্যানেল সেই তালিকা থেকে নির্বাচিত আইটেমের বিস্তারিত তথ্য প্রদর্শন করে।
ধরা যাক, একটি অ্যাপ্লিকেশন যেখানে প্রোডাক্টের তালিকা (Master) দেখানো হচ্ছে এবং প্রতিটি প্রোডাক্টের বিস্তারিত তথ্য (Detail) প্রদর্শিত হচ্ছে।
এখানে দুটি প্যানেল থাকবে:
XAML Example for Master-Detail View:
<Window x:Class="MasterDetailExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Master-Detail View" Height="350" Width="525">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*" />
<ColumnDefinition Width="3*" />
</Grid.ColumnDefinitions>
<!-- Master Panel -->
<ListView Name="ProductList" Grid.Column="0"
DisplayMemberPath="Name"
SelectionChanged="ProductList_SelectionChanged">
</ListView>
<!-- Detail Panel -->
<StackPanel Grid.Column="1">
<TextBlock Name="ProductName" FontSize="16" />
<TextBlock Name="ProductDescription" FontSize="14" />
<TextBlock Name="ProductPrice" FontSize="14" />
</StackPanel>
</Grid>
</Window>
এখানে, ListView উপাদান ProductList হিসেবে Master Panel-এ প্রদর্শিত হবে। যখন ব্যবহারকারী একটি আইটেম নির্বাচন করবে, তখন তার বিস্তারিত তথ্য ProductName, ProductDescription, এবং ProductPrice এর মাধ্যমে Detail Panel-এ দেখানো হবে।
ViewModel Example:
public class ProductViewModel : INotifyPropertyChanged
{
private ObservableCollection<Product> _products;
private Product _selectedProduct;
public ObservableCollection<Product> Products
{
get { return _products; }
set { _products = value; OnPropertyChanged(); }
}
public Product SelectedProduct
{
get { return _selectedProduct; }
set
{
_selectedProduct = value;
OnPropertyChanged();
UpdateDetail();
}
}
public ProductViewModel()
{
Products = new ObservableCollection<Product>
{
new Product { Name = "Laptop", Description = "A high-performance laptop", Price = 1200 },
new Product { Name = "Smartphone", Description = "Latest model smartphone", Price = 800 },
new Product { Name = "Headphones", Description = "Noise-canceling headphones", Price = 150 }
};
}
private void UpdateDetail()
{
// Update details based on the selected product
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
User Control হল একটি পুনঃব্যবহারযোগ্য UI কম্পোনেন্ট যা একটি বা একাধিক UI উপাদান ধারণ করে এবং একটি একক কন্ট্রোলের মতো ব্যবহার করা যায়। User Control ব্যবহার করলে একই UI উপাদানকে একাধিক জায়গায় পুনরায় ব্যবহার করা সহজ হয় এবং কোড কমে যায়।
ধরা যাক, একটি ProductDetailControl তৈরি করা হচ্ছে যা প্রোডাক্টের বিস্তারিত তথ্য প্রদর্শন করবে।
XAML (User Control for Product Detail):
<UserControl x:Class="MasterDetailExample.ProductDetailControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="400" Height="200">
<StackPanel>
<TextBlock Name="ProductName" FontSize="16" />
<TextBlock Name="ProductDescription" FontSize="14" />
<TextBlock Name="ProductPrice" FontSize="14" />
</StackPanel>
</UserControl>
এখন, আপনি এই User Control কে MainWindow.xaml এ ব্যবহার করতে পারবেন।
MainWindow.xaml (Master-Detail View with User Control):
<Window x:Class="MasterDetailExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MasterDetailExample"
Title="Master-Detail View" Height="350" Width="525">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*" />
<ColumnDefinition Width="3*" />
</Grid.ColumnDefinitions>
<!-- Master Panel -->
<ListView Name="ProductList" Grid.Column="0"
DisplayMemberPath="Name"
SelectionChanged="ProductList_SelectionChanged">
</ListView>
<!-- User Control for Detail Panel -->
<local:ProductDetailControl Grid.Column="1" />
</Grid>
</Window>
এখানে, ProductDetailControl নামক User Control ব্যবহার করা হয়েছে যা Master Panel থেকে নির্বাচন করা প্রোডাক্টের বিস্তারিত দেখাবে। এটি MainWindow.xaml এর অংশ হিসেবে ব্যবহৃত হচ্ছে।
Master-Detail View এবং User Control ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনের UI কে আরও মডুলার এবং পুনঃব্যবহারযোগ্য করে তুলতে পারেন। Master-Detail View প্যাটার্ন ব্যবহার করে ব্যবহারকারী সহজেই ডেটার সারাংশ এবং বিস্তারিত দেখতে পারে, এবং User Control ব্যবহার করে UI উপাদানগুলোকে পুনঃব্যবহারযোগ্য এবং পরিচালনাযোগ্য রাখা যায়।
MVVM (Model-View-ViewModel) প্যাটার্নে Navigation এবং Data Passing দুটি গুরুত্বপূর্ণ বিষয়, বিশেষত যখন একাধিক পেজ বা ভিউ এর মধ্যে ডেটা শেয়ার করা এবং এক ভিউ থেকে অন্য ভিউতে নেভিগেট করা প্রয়োজন। MVVM অ্যাপ্লিকেশনে সাধারণত ডেটা বাইন্ডিং এবং কমান্ড প্যাটার্ন ব্যবহার করা হয় নেভিগেশন এবং ডেটা পাসিং এর জন্য, যাতে ViewModel এবং View এর মধ্যে স্পষ্ট বিভাজন থাকে।
এখানে Navigation Parameter এবং Data Passing Techniques সম্পর্কে বিস্তারিত আলোচনা করা হয়েছে।
Navigation এর মাধ্যমে আপনি এক ভিউ থেকে অন্য ভিউতে যেতে পারেন এবং মাঝে মাঝে আপনাকে কিছু ডেটা পাস করতে হতে পারে। এই ডেটা পাসিংয়ের মাধ্যমে পরবর্তী ভিউটি বা পেজটি প্রাসঙ্গিক ডেটার সাথে লোড হতে পারে।
Navigation Parameter হল সেই প্যারামিটার, যা একটি ভিউ থেকে অন্য ভিউতে পাস করা হয়। সাধারণত, এটি ViewModel এর মাধ্যমে সম্পন্ন করা হয়, এবং এই প্যারামিটারটি নেভিগেশনের সাথে সম্পর্কিত ডেটা বা ইউজারের ইন্টারঅ্যাকশন অনুযায়ী পরিবর্তিত হতে পারে।
ধরা যাক, আপনি একটি ProductDetailPage পেজে নেভিগেট করতে চান এবং সেখানে একটি পণ্য সম্পর্কিত বিস্তারিত তথ্য পাস করতে চান। এই পণ্যটির আইডি বা নাম আপনি পাস করতে পারবেন।
public class ProductListViewModel
{
private readonly INavigationService _navigationService;
public ICommand ViewProductDetailsCommand { get; private set; }
public ProductListViewModel(INavigationService navigationService)
{
_navigationService = navigationService;
ViewProductDetailsCommand = new RelayCommand<int>(ViewProductDetails);
}
private void ViewProductDetails(int productId)
{
_navigationService.NavigateTo("ProductDetailPage", new NavigationParameters { { "ProductId", productId } });
}
}
এখানে, ProductListViewModel এর ViewProductDetailsCommand কমান্ডের মাধ্যমে ProductDetailPage এ একটি productId প্যারামিটার পাঠানো হচ্ছে।
ProductDetailPage পেজে, প্যারামিটার গ্রহণ করতে হবে এবং সেই অনুযায়ী ViewModel-এ প্রাসঙ্গিক ডেটা লোড করতে হবে।
public class ProductDetailViewModel
{
private readonly IProductService _productService;
private int _productId;
public string ProductName { get; set; }
public decimal ProductPrice { get; set; }
public ProductDetailViewModel(INavigationService navigationService, IProductService productService)
{
_productService = productService;
// Navigating and receiving the parameter
navigationService.Navigated += (sender, args) =>
{
if (args.NavigationContext.Parameters.ContainsKey("ProductId"))
{
_productId = (int)args.NavigationContext.Parameters["ProductId"];
LoadProductDetails();
}
};
}
private void LoadProductDetails()
{
var product = _productService.GetProductById(_productId);
ProductName = product.Name;
ProductPrice = product.Price;
}
}
এখানে, ProductDetailViewModel পেজের নেভিগেশন থেকে productId প্যারামিটার গ্রহণ করছে এবং সেই অনুযায়ী প্রোডাক্টের বিস্তারিত তথ্য লোড করছে।
MVVM অ্যাপ্লিকেশনে এক ভিউ থেকে অন্য ভিউতে ডেটা পাস করার বেশ কয়েকটি জনপ্রিয় পদ্ধতি রয়েছে। এই পদ্ধতিগুলি ViewModel এর মাধ্যমে পরিচালিত হয় এবং View এবং ViewModel এর মধ্যে সঠিক বিভাজন বজায় রাখে।
Data Binding হল সবচেয়ে সাধারণ পদ্ধতি, যেখানে একটি ভিউ ViewModel এর প্রপার্টি সাথে বাইন্ড করা হয়। এই পদ্ধতিতে, যখন ViewModel এর প্রপার্টি পরিবর্তিত হয়, তখন তা স্বয়ংক্রিয়ভাবে View-এ প্রতিফলিত হয়। এই পদ্ধতিতে ডেটা পাস করার জন্য Command Parameter এবং ViewModel প্রপার্টি ব্যবহার করা যেতে পারে।
<!-- XAML File (View) -->
<Button Content="View Product Details" Command="{Binding ViewProductDetailsCommand}" CommandParameter="{Binding SelectedProductId}" />
এখানে, Button কমান্ডের মাধ্যমে SelectedProductId CommandParameter হিসাবে পাস করা হচ্ছে। এই প্যারামিটার ViewModel এর ViewProductDetailsCommand কমান্ডে পাস হবে।
একাধিক ভিউ বা পেজের মধ্যে ডেটা শেয়ার করার জন্য EventAggregator ব্যবহার করা যেতে পারে। এটি ViewModel-গুলোর মধ্যে ইভেন্ট কমিউনিকেশন করতে সাহায্য করে এবং ডেটা পাস করার একটি সুবিধাজনক পদ্ধতি সরবরাহ করে।
public class ProductSelectionEvent : PubSubEvent<int> { }
public class ProductListViewModel
{
private readonly IEventAggregator _eventAggregator;
public ProductListViewModel(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
}
public ICommand SelectProductCommand { get; private set; }
private void SelectProduct(int productId)
{
_eventAggregator.GetEvent<ProductSelectionEvent>().Publish(productId);
}
}
এখানে, ProductListViewModel ইভেন্টটি পাবলিশ করছে যখন একটি প্রোডাক্ট নির্বাচন করা হয়। আর অন্য ViewModel বা ভিউ সেই ইভেন্টটি সাবস্ক্রাইব করে ডেটা গ্রহণ করতে পারে।
Service-based communication হল যেখানে একটি শেয়ার করা Service ক্লাসের মাধ্যমে ডেটা পাস করা হয়। এখানে ডেটা সাধারণত ViewModel থেকে Service-এ পাস করা হয় এবং তারপর সেখান থেকে অন্য ViewModel এ প্রেরণ করা হয়।
public class ProductService
{
private Product _selectedProduct;
public Product GetSelectedProduct()
{
return _selectedProduct;
}
public void SetSelectedProduct(Product product)
{
_selectedProduct = product;
}
}
public class ProductListViewModel
{
private readonly ProductService _productService;
public ProductListViewModel(ProductService productService)
{
_productService = productService;
}
public ICommand SelectProductCommand { get; private set; }
private void SelectProduct(Product product)
{
_productService.SetSelectedProduct(product);
}
}
এখানে, ProductService ক্লাসটি ViewModel গুলোর মধ্যে ডেটা শেয়ার করতে সাহায্য করছে।
Navigation Parameters এবং Data Passing Techniques MVVM প্যাটার্নে সঠিকভাবে নেভিগেশন এবং ডেটা আদান-প্রদান করতে অত্যন্ত গুরুত্বপূর্ণ। Navigation Parameters এর মাধ্যমে এক ভিউ থেকে অন্য ভিউতে ডেটা পাস করা সহজ হয় এবং Data Binding সহ অন্যান্য পদ্ধতিগুলির মাধ্যমে ডেটা শেয়ার করা হয় যা অ্যাপ্লিকেশনটির কার্যক্ষমতা এবং ব্যবহারকারীর অভিজ্ঞতা বৃদ্ধি করে।
common.read_more